﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassTestWork3
{

    //Составить класс для определения одномерных массивов целых чисел(векторов).
    //Предусмотреть возможность обращения к отдельному элементу массива 
    //с контролем выхода за пределы массива,
    //возможность задания произвольных границ индексов при создании объекта,
    //и выполнения операций поэлементного сложения и вычитания массивов одинаковой длинны.

    enum ArrayAction
    {
        
        Addition,
        Subtraction
    }

    class OneDimensionalArray
    {
        private int[] initialArray;
        private int shift;

        public OneDimensionalArray(int size, int shift)
        {
            initialArray = new int[size];
            this.shift = shift;

            for (int i = 0; i < initialArray.Length; i++)
            {
                initialArray[i] = i;
            }
        }

        public int this[int index]
        {
            get
            {
                index -= shift;
                if(index < 0 || index >= initialArray.Length)
                    throw new IndexOutOfRangeException("Index");
                return initialArray[index];
            }
            set
            {
                index -= shift;
                if (index < 0 || index >= initialArray.Length)
                    throw new IndexOutOfRangeException("Index");
                initialArray[index] = value;
            }
        }

        public void AddOrSub(int[] array, ArrayAction action)
        {
            if(initialArray.Length != array.Length)
                throw new ArgumentException("Incorrect input array!!!");

            int param = action == ArrayAction.Addition ? 1 : -1;

            for (int i = 0; i < initialArray.Length; i++)
                initialArray[i] += param *array[i];
        }

        public void PrintToConsole()
        {
            for (int i = 0; i < initialArray.Length; i++)
            {
                Console.Write("{0} ", initialArray[i]);
            }
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            int size = 5;
            OneDimensionalArray testArray = new OneDimensionalArray(size,5);
            testArray.PrintToConsole();

            Console.WriteLine();

            int[] arr = new int[5] {4,3,2,1,0};

            testArray.AddOrSub(arr, ArrayAction.Subtraction);

            testArray.PrintToConsole();

        }
    }
}
